package com.zts.modules.sys.mapper;

import com.google.common.base.Strings;
import com.zts.modules.sys.entity.Para;
import com.zts.modules.sys.entity.Para;
import org.apache.ibatis.jdbc.SQL;

/**
 * Created by jisd on 2017/6/19.
 */
public class ParaSqlProvider {
    public ParaSqlProvider() {
    }

    public String get(Long id) {
        return (new SQL() {
            {
                this.SELECT("p.*");
                this.FROM(" sys_para p  ");
                this.WHERE(" p.id = #{id} ");
            }
        }).toString();
    }

    public String getByEntity(final Para para) {
        return (new SQL() {
            {
                this.SELECT("p.*");
                this.FROM(" sys_para p  ");
                if(!Strings.isNullOrEmpty(para.getParaName())) {
                    this.WHERE("r.para_name = #{paraName}");
                }

                if(!Strings.isNullOrEmpty(para.getParaValue())) {
                    this.WHERE("p. = #{paraValue}");
                }

                if(!Strings.isNullOrEmpty(para.getParaCode())) {
                    this.WHERE("p.para_code = #{paraCode}");
                }

                if(null != para.getId() && para.getId().longValue() > 0) {
                    this.WHERE("p.id  = #{id}");
                }
                if(!Strings.isNullOrEmpty(para.getStatus())) {
                    this.WHERE("p.status  = #{status}");
                }
                if(!Strings.isNullOrEmpty(para.getRemark())) {
                    this.WHERE("p.remark  = #{remark}");
                }

                this.ORDER_BY(" p.id ");
            }
        }).toString();
    }

    public String getList(Para para) {
        return this.getByEntity(para);
    }

    public String update(final Para para) {
        return (new SQL() {
            {
                this.UPDATE("sys_para");
                if(!Strings.isNullOrEmpty(para.getParaName())) {
                    this.SET("para_name = #{paraName}");
                }
                if(!Strings.isNullOrEmpty(para.getParaValue())) {
                    this.SET("para_value = #{paraValue}");
                }
                if(!Strings.isNullOrEmpty(para.getParaCode())) {
                    this.SET("para_code = #{paraCode}");
                }

                if(!Strings.isNullOrEmpty(para.getStatus())) {
                    this.SET("status = #{status}");
                }

                if(!Strings.isNullOrEmpty(para.getRemark())) {
                    this.SET("remark = #{remark}");
                }
                this.WHERE("id = #{id}");
            }
        }).toString();
    }

    public String insert(final Para para) {
        return (new SQL() {
            {
                this.INSERT_INTO("sys_para");
                this.VALUES("para_name", "#{paraName}");
                this.VALUES("para_code", "#{paraCode}");
                if(!Strings.isNullOrEmpty(para.getStatus())) {
                    this.VALUES("status", "#{status}");
                } else {
                    this.VALUES("status", "1");
                }

                this.VALUES("para_value", "#{paraValue}");
                this.VALUES("create_time", "now()");
                this.VALUES("remark", "#{remark}");
            }
        }).toString();
    }

    public String delete(final Para para) {
        return (new SQL() {
            {
                this.UPDATE("sys_para");
                this.SET("status ='0' ");
                this.WHERE("id = #{id}");
            }
        }).toString();
    }

    public String getByParaName(String paraName) {
        return (new SQL() {
            {
                this.SELECT("r.*");
                this.FROM(" sys_para r  ");
                this.WHERE(" r.paraName = #{paraName}");
            }
        }).toString();
    }



}
